function C = A2( C,CON )
  %**********************************************************************
  %*** * Propulsion.
  %*** * Reserved C(3510) locations are 1300-1399
  %*** *
  %*** * This module performs the following functions:
  %*** *
  %*** * (1) Calculates missile thrust
  %*** * (2) Initiates rocket booster staging
  %*** * (3) Calculates missile mass
  %*** *
  %*** * MODIFICATION HISTORY
  %*** * 000113 Created by Peter Zipfel
  %*** *
  %*** ******************************************************************

  %*** INPUT DATA      
  % MPROP = D/G =0:No thrust; =1:Coasting =2:Burning
  % FUELI = D Initial total fuel in stage - kg
  % FUELR = D Maximum fuel rate through motor - kg/s
  % SPI = D Effective specific impulse - s
  % VMASSI = D Initial mass of remaining stages - kg
  % THRTL = D Throttle (0-1) - ND
  % AEXIT = D Nozzle exit aerea - m^2
  % PEXIT = D Rocket nozzle exit pressure - Pa

  mprop = C(CON.MPROP);
  fueli = C(CON.FUELI);
  fuelr = C(CON.FUELR);
  spi = C(CON.SPI);
  vmassi = C(CON.VMASSI);
  thrtl = C(CON.THRTL);
  aexit = C(CON.AEXIT);
  pexit = C(CON.PEXIT);


  %*** INIIALIZATION
  % FMASSF = I/G Expended fuel in stage - kg
  % FMASSFM = I Expended fuel in stage, stored - kg
  % VMASSIM = I Initial mass of prior stage - kg

  fmassf = C(CON.FMASSF);
  fmassfm = C(CON.FMASSFM);
  vmassim = C(CON.VMASSIM);

  %*** INPUT FROM EXECUTIVE
  % AGRAV = E Gravitational acceleration (refrence) - m/s^2

  agrav = C(CON.AGRAV);
  der = C(CON.DER);
  icoor = C(CON.ICOOR);

  %*** INPUT FROM OTHER MODULES
  % PATM= O Atmospheric pressure - Pa
  patm = C(CON.PATM);

  %*** OUTPUT TO OTHER MODULES

  % equivalence(bcom_1(1313),thrustx) ::;
  % equivalence(bcom_1(1309),vmass) ::;

  % THRUSTX = O Thrust at altitude - kN
  % VMASS = O Vehicle mass - kg

  %*** DIAGNOSTICS

  % equivalence(bcom_1(1306),fmassfd) ::;
  fmassfd = C(CON.FMASSFD);
  fuel = C(CON.FUEL);
  % equivalence(bcom_1(1311),fuel) ::;

  % FMASSFD = G Fuel rate - kg/s
  % FUEL = G Fuel remaining in stage - kg

  %*** FOR NEW STAGE: INITIALIZE EXPENDED FUEL TO ZERO

  if((vmassim-vmassi) > 0.)
    fmassfm=0.;
    fmassf=0.;
    fmassfd=0.;
  end;

  vmassim=vmassi;

  %*** CALCULATE FUEL EXPENDED IN STAGE

  if(icoor == 0)
    fmassf=fmassf+fmassfd.*der;
  end;

  if(mprop == 0)
    %*** NO BURNING
    thrust=0.;
    fmassfd=0.;
    vmass=vmassi-fmassfm;
    fuel=fueli-fmassfm;
  end;

  if(mprop == 1)
    %*** COAST AFTER BURN-OUT
    thrust=0.;
    fmassfd=0.;
    fmassf=0.;
    vmass=vmassi-fmassfm;
    fuel=fueli-fmassfm;
  end;

  if(mprop == 2)
    %*** ROCKET MOTOR BURNING

    flr=fuelr.*thrtl;

    %-- Change this to use the Pe variable
    %         THRUST=FLR*SPI*AGRAV+(101325.-PATM)*AEXIT
    thrust=flr.*spi.*agrav+(pexit-patm).*aexit;
    %         PRINT *, 'T to W:', THRUST / VMASS
    fmassfd=flr;
    fuel=fueli-fmassf;
    vmass=vmassi-fmassf;
    fmassfm=fmassf;
    if(fuel <= 0.)
      mprop=1;
      thrust=0.;
      fmassfd=0.;
      fmassf=0.;
    end;
  end;

  thrustx=thrust./1000.;

  %*** OUTPUT TO OTHER MODULES  
  C(CON.THRUSTX) = thrustx;
  C(CON.VMASS) = vmass;
  C(CON.FUEL) = fuel;
  C(CON.FMASSFD) = fmassfd;

end

